package com.utils;
import sun.misc.BASE64Encoder;
 
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Arrays;
import java.util.List;
import java.util.Random;

import org.springframework.web.multipart.MultipartFile;
 

/**
 * 
*    
* @项目名称：sqt   
* @类名称：ImageUtil   
* @类描述：   图片工具类
* @开发者：gml   
* @创建时间：2019-1-16 下午5:55:19   
* @version
 */
public class ImageUtil {
 
	/**
	 * 
	 * @方法名：getURLImage
	 * @描述: 网络图片转base64
	 * @参数: @param imageUrl
	 * @参数: @return
	 * @参数: @throws Exception
	 * @返回类型: String
	 * @开发者： gml
	 * @创建时间: 2019-2-20 上午10:50:42
	 */
    public static String getURLImage(String imageUrl) throws Exception {
        //new一个URL对象
        URL url = new URL(imageUrl);
        //打开链接
        HttpURLConnection conn = (HttpURLConnection)url.openConnection();
        //设置请求方式为"GET"
        conn.setRequestMethod("GET");
        //超时响应时间为5秒
        conn.setConnectTimeout(5 * 1000);
        //通过输入流获取图片数据
        InputStream inStream = conn.getInputStream();
        //得到图片的二进制数据，以二进制封装得到数据，具有通用性
        byte[] data = readInputStream(inStream);
        BASE64Encoder encode = new BASE64Encoder();
        String s = encode.encode(data);
        return "data:image/png;base64,"+s;
    }
 
    /**
     * 
     * @方法名：readInputStream
     * @描述: 获取图片二进制数据
     * @参数: @param inStream
     * @参数: @return
     * @参数: @throws Exception
     * @返回类型: byte[]
     * @开发者： gml
     * @创建时间: 2019-2-20 上午10:51:23
     */
    private static byte[] readInputStream(InputStream inStream) throws Exception{
        ByteArrayOutputStream outStream = new ByteArrayOutputStream();
        //创建一个Buffer字符串
        byte[] buffer = new byte[1024];
        //每次读取的字符串长度，如果为-1，代表全部读取完毕
        int len = 0;
        //使用一个输入流从buffer里把数据读取出来
        while( (len=inStream.read(buffer)) != -1 ){
            //用输出流往buffer里写入数据，中间参数代表从哪个位置开始读，len代表读取的长度
            outStream.write(buffer, 0, len);
        }
        //关闭输入流
        inStream.close();
        //把outStream里的数据写入内存
        return outStream.toByteArray();
    }
    /**
	 * 获取网络图片并转为Base64编码
	 * 
	 * @param url
	 *            网络图片路径
	 * @return base64编码
	 * @throws Exception
	 */
	public static String GetUrlImageToBase64(String url) throws Exception {
		if (url == null || "".equals(url.trim()))
			return null;
		URL u = new URL(url);
		// 打开图片路径
		HttpURLConnection conn = (HttpURLConnection) u.openConnection();
		// 设置请求方式为GET
		conn.setRequestMethod("GET");
		// 设置超时响应时间为5秒
		conn.setConnectTimeout(5000);
		// 通过输入流获取图片数据
		InputStream inStream = conn.getInputStream();
		// 读取图片字节数组
		byte[] data = new byte[inStream.available()];
		inStream.read(data);
		inStream.close();
		// 对字节数组Base64编码
		BASE64Encoder encoder = new BASE64Encoder();
		// 返回Base64编码过的字节数组字符串
		return "data:image/png;base64,"+encoder.encode(data);
	}
	
    public static void main(String[] args) {
    	String base64Img = null;
		/*try {
			base64Img = GetUrlImageToBase64("http://i4.qhimg.com/dr/270_500_/t019e5e3b6849035f6d.jpg");
		} catch (Exception e) {
			e.printStackTrace();
		}
		System.out.println(base64Img);*/
    	String base64Img2=null;
		try {
			base64Img2 = getURLImage("http://mp.shenqitui.com/image/default/avatar/defaulthead.png");
			System.out.println(base64Img2);
		} catch (Exception e) {
			e.printStackTrace();
		}
		//BASE64DecodedMultipartFile.GenerateImage(base64Img2,"D:/git/sqts/sqt/src/main/webapp/atest/","png");
		
		MultipartFile multipartFile=BASE64DecodedMultipartFile.base64ToMultipart(base64Img2);
		String uploadFileName = multipartFile.getOriginalFilename();
		System.out.println(uploadFileName);
		
		String originalFilename = multipartFile.getOriginalFilename();
		 
        // 文件扩展名
        String ext = originalFilename.substring(originalFilename.lastIndexOf(".")).trim();

        

        String randomFilename = System.currentTimeMillis() + generateRandom() + ext;
        // 临时文件路径              
        File file_normer = new File("D:/git/sqts/sqt/src/main/webapp/commentImage/");  
        if (!file_normer.exists()) {  
            file_normer.mkdirs();  
        }  
        //将文件写入服务器
        String fileLocalPath = "D:/git/sqts/sqt/src/main/webapp/commentImage/" + randomFilename;
        File localFile = new File(fileLocalPath);
        try {
			multipartFile.transferTo(localFile);
		} catch (IllegalStateException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}


	}
    public static String generateRandom(){
    	Random random = new Random();
		long rnd = random.nextInt(999999) % (999999 - 100000 + 1) + 100000;
    	String pnum = String.valueOf(rnd);
    	return pnum;
	}
}